/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
 *
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

#include "nsISupports.idl"

interface nsIX509Cert;

[scriptable, uuid(5415626b-2930-440e-bfc5-55c87dbc4511)]
interface nsISSLStatus : nsISupports {
  readonly attribute nsIX509Cert serverCert;

  readonly attribute ACString cipherName;
  readonly attribute ACString cipherSuite;
  readonly attribute unsigned long keyLength;
  readonly attribute unsigned long secretKeyLength;
  [must_use]
  readonly attribute ACString keaGroupName;
  [must_use]
  readonly attribute ACString signatureSchemeName;

  const short SSL_VERSION_3   = 0;
  const short TLS_VERSION_1   = 1;
  const short TLS_VERSION_1_1 = 2;
  const short TLS_VERSION_1_2 = 3;
  const short TLS_VERSION_1_3 = 4;
  readonly attribute unsigned short protocolVersion;

  const short CERTIFICATE_TRANSPARENCY_NOT_APPLICABLE = 0;
  const short CERTIFICATE_TRANSPARENCY_NONE           = 1;
  const short CERTIFICATE_TRANSPARENCY_OK             = 2;
  const short CERTIFICATE_TRANSPARENCY_UNKNOWN_LOG    = 3;
  const short CERTIFICATE_TRANSPARENCY_INVALID        = 4;
  readonly attribute unsigned short certificateTransparencyStatus;

  readonly attribute boolean isDomainMismatch;
  readonly attribute boolean isNotValidAtThisTime;

  /* Note: To distinguish between
   *         "unstrusted because missing or untrusted issuer"
   *       and
   *         "untrusted because self signed"
   *       query nsIX509Cert::isSelfSigned
   */
  readonly attribute boolean isUntrusted;

  /**
   * True only if (and after) serverCert was successfully validated as
   * Extended Validation (EV).
   */
  readonly attribute boolean isExtendedValidation;
};
